/*
 * SCSI_CMD.H Version 1.01 (C)1995,1996 HUDSON SOFT
 * CD-ROMのコマンド等の定義 Ｃコンパイラ用ヘッダーファイル(SCSI_CMD.H)
 */

#ifndef _SCSI_CMD_H_
#define _SCSI_CMD_H_

/*
 * scsi command opcode
 */
/* PC-CD210 */
#define SCMD_TEST 0x00
#define SCMD_RSENS 0x03
#define SCMD_READ 0x08
#define SCMD_WRITE 0x0a
#define SCMD_INQ 0x12
#define SCMD_MODE_SELECT 0x15
#define SCMD_READ_EXTEND 0x28
#define CDR_READ_TOC 0xde
/* FX SYSTEM */
/* group 0 */
#define TEST_UNIT_READY 0x00
#define REZERO_UNIT 0x01
#define REQUEST_SENSE 0x03
#define READ 0x08
#define SEEK 0x0b
#define NO_OPERATION 0x0d
#define INQUIRY 0x12
#define MODE_SELECT 0x15
#define RESERVE 0x16
#define RELEASE 0x17
#define MODE_SENSE 0x1a
#define START_STOP_UNIT 0x1b
#define SEND_DIAGNOSTIC 0x1d
#define PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
/* group 1 */
#define READ_CDROM_CAPACITY 0x25
#define READ_EXTENDED 0x28
#define SEEK_EXTENDED 0x2b
#define VERIYFY 0x2f
#define PREFETCH 0x34
#define WRITE_BUFFER 0x3b
#define READ_BUFFER 0x3c
/* group 2 */
#define READ_SUB_CHANNEL 0x42
#define READ_TOC 0x43
#define READ_HEADER 0x44
#define PLAY_AUDIO 0x45
#define PLAY_AUDIO_MSF 0x47
#define PLAY_AUDIO_TRACK_INDEX 0x48
#define PLAY_AUDIO_TRACK_RELEATIVE 0x49
#define PAUSE_RESUME 0x4b
/* group 5 */
#define PLAY_AUDIO_12 0xa5
#define READ_12 0xa8
#define PLAY_AUDIO_TRACK_RELEATIVE_12 0xa9
#define VERIFY_12 0xaf
/* group 6 */
#define AUDIO_SCAN 0xd2
#define AUDIO_TRACK_SEARCH 0xd8
#define PLAY 0xd9
#define STILL 0xda
#define SET_STOP_TIME 0xdb
#define EJECT 0xdc
#define READ_SUBCODE_Q 0xdd
#define NEC_READ_TOC 0xde

/*
 * request sense data
 */

/* PC-CD210 */
#define SENSE_LEN 14
#define S_CLASS 0
#define S_KEY 2
#define S_AL 7
#define S_AKEY 12
/* FX SYSTEM */
#define REQUEST_SENSE_LEN 18	/* センスデータの長さ */
/* sense data中での各パラメータのバイト位置 */
#define SENSE_ERROR_CODE 0	/* Error Code と Valid bit */
#define SENSE_KEY 2		/* センスキー */
#define SENSE_INFO 3		/* インフォメーション バイト */
#define SENSE_INFO_HH 3		/* 論理ブロックアドレス high(highw ) */
#define SENSE_INFO_HL 4		/* 論理ブロックアドレス low(highw ) */
#define SENSE_INFO_LH 5		/* 論理ブロックアドレス high(loww ) */
#define SENSE_INFO_LL 6		/* 論理ブロックアドレス low(loww ) */
#define SENSE_INFO_AMIN 3	/* 絶対時間 分 */
#define SENSE_INFO_ASEC 4	/* 絶対時間 秒 */
#define SENSE_INFO_AFRAME 5	/* 絶対時間 フレーム */
#define SENSE_INFO_TNO  3	/* 曲番号 */
#define SENSE_SUB_ERROR 12	/* サブエラーコード */
/* bit test  */
#define SENSE_VALID_BIT 0x80	/* Valid ビット */
/* SENSE KEY */
#define NO_SENSE 0
#define NOT_READY 2
#define MEDIUM_ERROR 3
#define HARDWARE_ERROR 4
#define ILLEGAL_REQUEST 5
#define UNIT_ATTENTION 6
#define ABORTED_COMMAND 0xb
/* SUB ERROR */
#define VIOD_SENSE_DATA 0x00
#define DRIVE_NOT_READY 0x04
#define NO_DISC 0x0b
#define DISC_EJECT 0x0d

#define DATA_FIELD_UNCORRECT 0x11
#define SEEK_ERROR 0x15
#define HEADER_READ_ERROR 0x16
#define NOT_DIGITAL_AUDIO_TRACK 0x1c
#define NOT_CDROM_DATA_TRACK 0x1d

#define INVALID_COMMAND 0x20
#define INVALID_ADDRESS 0x21
#define INVALID_PARAMETER 0x22
#define INVALID_COMMAND_SEQUENCE 0x24
#define END_OF_VOLUME 0x25
#define INVALID_REQUEST_IN_CDB 0x27
#define DISC_CHANGED 0x28
#define UNIT_RESET 0x29
#define INVALID_PARAMETER_LIST 0x2a
#define NOT_AUDIO_PLAY_STATE 0x2c
#define INVALID_MESSAGE 0x2d
#define INITIATORS_ID_UNDEFINED 0x2f

#define PARITY_ERROR 0x30
#define ABORT_COMMAND 0x32
#define INTERFACE_TIMEOUT 0x3e

/*
 *  mode select 
 */
#define SELECT_LEN 10
#define MDSL_BLOCK_LEN 3
/* SCSI-2 */
#define MDSL_BDL 3
#define MDSL_DENSITY 0
#define MDSL_BL_2 5
#define MDSL_BL_1 6
#define MDSL_BL_0 7
/* vendor unique */
#define MDSL_FORMAT 4
#define MDSL_RETRY 9
#define MDSL_XA_BIT 0x80
#define MDSL_SH_BIT 0x40
#define MDSL_EC_BIT 0x04
#define MDSL_EJ_0 0
#define MDSL_EJ_1 1
#define MDSL_EJ_2 2
#define MDSL_EJ_3 3

#define MODE1_NORMAL 0
#define MODE1_MODE2_2340 3
#define MODE2_FORM1_NORMAL 0xc1


#define CDMODE_0 0
#define CDMODE_1 1
#define CDMODE_2 2

#define HEADER_CDMODE 3

/*
 * NEC READ TOC
 */
#define READ_TOC_TYPE0 0
#define READ_TOC_TYPE1 1
#define READ_TOC_TYPE2 2
#define READ_TOC_TYPE3 3

#define READ_TOC_LEN012 4	/* type 00-02 */
#define READ_TOC_LEN3 12	/* type==03 && TNO!=0 */

#define TOC_TYPE0_MIN 0
#define TOC_TYPE0_MAX 1

#define TOC_TYPE1_AMIN 0
#define TOC_TYPE1_ASEC 1
#define TOC_TYPE1_AFRAME 2

#define TOC_TYPE2_AMIN 0
#define TOC_TYPE2_ASEC 1
#define TOC_TYPE2_AFRAME 2
#define TOC_TYPE2_CTRL 3

#define CD_DATA_TRACK 0x04	/* flag bit */

#define TOC_NO_A0 0xa0
#define TOC_NO_A1 0xa1
#define TOC_NO_A2 0xa2
#define TOC_NO_B0 0xb0
#define TOC_NO_00 0

#define TOC_TYPE3_LENGTHH 0
#define TOC_TYPE3_LENGTHL 1

#endif /* _SCSI_CMD_H_ */
